import { WebApp } from "meteor/webapp";
import bodyParser from "body-parser";

// 全局应用JSON解析中间件
WebApp.connectHandlers.use(bodyParser.json());
// 处理URL编码的请求体
WebApp.connectHandlers.use(bodyParser.urlencoded({ extended: true }));

/**
 * 基础路由添加函数（全局）
 * @param {string} method - HTTP方法
 * @param {string} path - 路由路径
 * @param {Function} handler - 处理函数
 */
export function addRoute(method, path, handler) {
  WebApp.connectHandlers.use(path, (req, res, next) => {
    if (req.method === method.toUpperCase()) {
      handler(req, res, next); // 传递next支持中间件链
    } else {
      next();
    }
  });
}

/**
 * 资源路由工厂（根据传入的addRoute生成对应资源路由）
 * @param {Function} addRoute - 路由添加函数
 * @returns {Function} 资源路由创建函数
 */
export function createResource(addRoute) {
  return (basePath, controller) => {
    addRoute("GET", basePath, controller.index);       // 列表
    addRoute("POST", basePath, controller.store);      // 创建
    addRoute("GET", `${basePath}/:id`, controller.show);// 详情
    addRoute("PUT", `${basePath}/:id`, controller.update);// 更新
    addRoute("DELETE", `${basePath}/:id`, controller.destroy);// 删除
  };
}

/**
 * 简单路由工厂
 * @param {Function} addRoute - 路由添加函数
 * @returns {Function} 简单路由创建函数
 */
export function createSimpleRoute(addRoute) {
  return (method, path, handler) => {
    addRoute(method, path, handler);
  };
}

// 全局资源路由和简单路由（基于全局addRoute）
export const resource = createResource(addRoute);
export const simpleRoute = createSimpleRoute(addRoute);